package com.example.demo.utils;


import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;


/**
 * 用户token配置
 * Author:Meloa
 */
@Slf4j
public class TokenUtils {

    @Autowired
    RedisUtil redisUtil;
    @Autowired
    Gson gson;

    /**
     * 根据账号，userid获取每个账户在redis里面存token的key
     */
    public static String getAdminRedisKey(String account, String pwd) {
        return "token".concat(":").concat(account).concat(":") + pwd;
    }

    /**
     * 根据账号，userid获取每个账户在redis里面存auth的key
     */
    public static String getAdminRedisAuthKey(String account, String pwd) {
        return "Auth".concat(":").concat(account).concat(":") + pwd;
    }

    /**
     * 根据用户id创建token
     */
    public static String createToken(String name, String pwd) {
        String token = Md5Utils.encodeToken(name, pwd);
        return token;
    }

    /**
     * 根据token拿到用户信息
     */
//    public ExamuserVORedis findUserInfoByToken() {
//        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
//        String token = request.getHeader("token");
//        String exmUserInfo = redisUtil.get(token);
//        ExamuserVORedis examuserVORedis = gson.fromJson(exmUserInfo, new TypeToken<ExamuserVORedis>() {
//        }.getType());
//        return examuserVORedis;
//    }

    /**
     * 判断是否有权限操作超级管理员的功能,并返回用户信息，
     * 建议不要与findUserInfoByToken一起使用，
     */
//    public ExamuserVORedis judgeAuthBackInfo() {
//        ExamuserVORedis info = findUserInfoByToken();
//        if (info.getCollegeId().equals(CollegeAuthEnum.COLLEGEAUTHID.getCollegeId())) throw new UnAuthException();
//        return info;
//    }

    /**
     * 判断是否有权限操作超级管理员的功能，
     * 单独鉴权
     * 建议不要与findUserInfoByToken一起使用，
     */
//    public void judgeHasAuth() {
//        long collegeId = findUserInfoByToken().getCollegeId();
//        if (collegeId != CollegeAuthEnum.COLLEGEAUTHID.getCollegeId()) throw new UnAuthException();
//    }



    //学生有关
    /**
     * 学生信息放入redis
     */
    public String getStudentInfoKeyByIdcardOrPhone(String info){
        return "sudentInfo:".concat(info);
    }


    //学生有关
    /**
     * 获取手机号码存reids的key
     */
    public static String getRedisKeyPhone(String info){
        return "phoneKey:".concat(info);
    }


    /**
     * 获取每个学生当前未考试的key
     */
    public  String getStudentExamlList(String stuId) {
        return "sudentCurrentExamList:".concat(stuId);
    }


    /**
     * 考试信息
     * @param examId
     * @return
     */
    public String getExam(String examId) {
        return "exam:".concat(examId);
    }

    /**
     * 考卷信息
     * @param paperId
     * @return
     */
    public String getPaper(String paperId) {
        return "paper:".concat(paperId);
    }

    /**
     * 学生试卷信息
     */
    public String getStudentPaper(String exam_id,String student_id){
        return "studentPaper:Id:".concat(student_id).concat("+Exam:").concat(exam_id);
    }

}
